package com.fxu.framework.mq.rabbit;

import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
//import org.springframework.amqp.core.ReturnedMessage;
//import org.springframework.amqp.rabbit.connection.CorrelationData;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author fangxu
 * @version 2025-03-17
 */
@Slf4j
@Service
public class RabbitMqProducer { // implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnsCallback
//    @Autowired
//    private RabbitTemplate rabbitTemplate;
//
//    /**
//     * 发送消息
//     * @param exchange topic exchange
//     * @param routeKey 路由KEY
//     * @param message 消息
//     */
//    public void sendToMq(String exchange, String routeKey, Object message) {
//        log.info("sendCancleOrderMq orderEtcusdt is: {},", JSONUtil.toJsonStr(message));
//        int i = 0;
//        while (i < 3) {
//            try {
//                log.info("send dealCancelOrder i:{} to mq: exchage:{},routeKey:{},nessage:{}",
//                        i, exchange, routeKey, JSONUtil.toJsonStr(message));
//                rabbitTemplate.convertAndSend(exchange, routeKey, JSONUtil.toJsonStr(message));
//                return;
//            } catch (Exception ex) {
//                log.error("send RabbitMq error", ex);
//                i++;
//            }
//        }
//    }
//
//    /**
//     * 消息从交换机成功到达队列，则returnedMessage方法不会执行;
//     * 消息从交换机未能成功到达队列，则returnedMessage方法会执行;
//     * @param returnedMessage 返回消息
//     */
//    @Override
//    public void returnedMessage(@NotNull ReturnedMessage returnedMessage) {
//        log.error("returnedMessage回调方法>>>:message:{}", JSONUtil.toJsonStr(returnedMessage));
//    }
//
//    /**
//     * 如果消息没有到达交换机,则该方法中isSendSuccess = false,error为错误信息;
//     * 如果消息正确到达交换机,则该方法中isSendSuccess = true;
//     * @param correlationData 啊返回数据
//     * @param ack 是否确认
//     * @param error 错误信息
//     */
//    @Override
//    public void confirm(CorrelationData correlationData, boolean ack, String error) {
//        if (ack) {
//            log.info("confirm回调方法>>>消息发送到交换机成功！");
//        } else {
//            log.error("confirm回调方法>>>消息发送到交换机失败！correlationDataId:{},correlationData:{} 原因 : [{}]",
//                    correlationData.getId(), JSONUtil.toJsonStr(correlationData), error);
//        }
//    }

}
